우아한테크코스 레벨 4 7주차
서론
바쁘다 바빠 현대사회... 잠시 여유가 생긴 지금 밀린 회고를 끄적끄적 써보려고합니다. 기억이 모조리 휘발되기 전에 지금이라도 써야만해...!!
신나게 놀고 온 대가를 치루는 한주였습니다. 😅
본 주차 회고는 10월 10일 ~ 10월 15일사이에 일어났던 일입니다.
피움 🌱
Connection Pool 설정을 위한 사전 준비
Hikari CP Connection Pool 값 설정을 위해 Jmeter를 사용하고자 했습니다. (Tomcat Thread 설정했을 때 사용했던 툴이라서)
네트워크 통신으로 인한 요청, 응답 값을 고려하지 않기 위해 dev서버에 jmeter를 두고 localhost로 요청을 보내기로 했습니다.
jmeter 테스트 이후 html로 출력되는 결과를 확인하고자 nginx로 해당 파일을 확인할 수 있도록 열어줬습니다. 👍

jenkins plugin으로 jmeter를 실행시킬 수도 있었으나 이 또한 시간관계상 그냥 cli로 돌리도록 구성했습니다.
무중단 배포
프로젝트에 spring-boot-actuator 의존성을 추가하여 어플리케이션의 health check가 가능해졌습니다~!
이에 무중단배포 쉘 스크립트가 다음과 같이 변경되었습니다.
#!/bin/bash
echo "> 현재 구동중인 Port 확인"
# CURRENT & NEW 포트 확인
if lsof -Pi :8080 -sTCP:LISTEN -t >/dev/null; then
echo "현재 8080 포트가 사용 중입니다."
CURRENT_PORT=8080
NEW_PORT=8081
elif lsof -Pi :8081 -sTCP:LISTEN -t >/dev/null; then
echo "현재 8081 포트가 사용 중입니다."
CURRENT_PORT=8081
NEW_PORT=8080
else
echo "8080과 8081 포트 모두 사용 중이지 않습니다."
exit 1
fi
# NEW 포트 사용중일 경우 종료
if lsof -Pi :$NEW_PORT -sTCP:LISTEN -t >/dev/null; then
echo "NEW_PORT가 사용중입니다."
PID=$(lsof -Pi :$NEW_PORT -sTCP:LISTEN -t)
kill -9 $PID
echo "사용 중인 NEW_PORT 종료했습니다.."
sleep 3
else
echo "NEW_PORT가 사용 중이지 않습니다."
fi
#Spring ON
nohup java -jar "pium.jar" --spring.profiles.active=dev --server.port=$NEW_PORT > log_$NEW_PORT.txt 2>&1 &
echo 백그라운드 모드로 애플리케이션 실행 성공 !!
# 새로 가동하는 서버 상태 확인
sleep 15
for retry_count in {1..10}
do
response=$(curl -s http://localhost:$NEW_PORT/actuator/health)
up_count=$(echo $response | grep 'UP' | wc -l)
if [ $up_count -ge 1 ]
then # $up_count >= 1 ("UP" 문자열이 있는지 검증)
echo "> Health check 성공"
break
else
echo "> 새롭게 가동하는 서버의 상태가 UP이 아닙니다."
echo "> Health check: ${response}"
fi
if [ $retry_count -eq 10 ]
then
echo "> Health check 실패. "
echo "> Nginx에 연결하지 않고 배포를 종료합니다."
exit 1
fi
echo "> Health check 연결 실패. 재시도..."
sleep 10
done
# 새로 가동하는 서버로 전환
echo "> 전환할 Port: $NEW_PORT"
echo "> Port 전환"
echo "set \$service_url http://127.0.0.1:${NEW_PORT};" | sudo tee /etc/nginx/conf.d/service-url.inc
echo "> NGINX Reload"
sudo service nginx reload
echo "> CURRENT_PORT를 종료합니다"
CURRENT_PID=$(lsof -Pi :$CURRENT_PORT -sTCP:LISTEN -t)
kill -9 $CURRENT_PID
🚀 미션
레거시 코드 리팩터링 미션이 시작되었습니다~!
1단계는 테스트를 통한 코드 보호가 요구사항이네요!
Mocking을 할지 통합테스트를 할지 고민이 되었는데 레벨 2 지하철 미션에서 통합테스트 방식으로 작성했던 방식이 생각났습니다.
뭔가 이번에는 안해본 방식으로 해보고싶다~ 생각이 들어서 DAO를 전부 Mocking해서 서비스를 테스트했습니다
(이거 나중에 1000만배 후회함..)
지금 드는 생각이지만 API call을 통한 테스트(RestAssured 같은거..)를 수행하는것이 리팩터링을 진행하면서 정신건강에 이롭지않을까 생각이 듭니다.
💻 근로
Gradle Task를 구성해서 OpenAPI CodeGenerator를 쓸만하게 만들었었는데 변수 선언이나 Task들이 너무 난잡하게 되어있어서 약간의 리팩터링을 거쳤습니다~
중간에 공지&출결팀의 요구사항을 문서화하기 위해 블랙캣과 페어로 OpenAPI Spec 문서화 작업을 진행했습니다 👍

페어룸에서 우다다다 문서 작성완료! 꽤나 재밌어서 시간가는줄 모르고 작업을 진행했네요 😆
💪 일상

우테코 6기 모집공고가 캠퍼스 여기저기 걸려있네요~! 새로운 캐릭터(목성인가..💫)도 귀엽네요 'O'

아이폰 15 프로 Owner 필립... 부러워서 여기 박제할게~

밀린 5, 6주차 회고도 이때 작성했네요.. 밀리고 또 밀리는 회고바다~

피플행복팀에서 주최한 7시반 내고향 행사에도 참가했습니다~! 이전기수 선배님들을 뵙는 즐거운 자리였습니다~
4기 야호, 헌치, 주디, 연로그 반가웠습니다~!! 도움되는 많은 이야기를 해주셔서 감사합니다 🙇♂️
정리
한글날까지 신나게 놀다온 과거의 내가 미처 생각하지 못했던 일들을 와르르 받으면서 꽤나 정신없는 한주였습니다...
다음주가 최종 데모데이라는게 실감이 안날정도로 하루하루 정신없이 보던 기억이 나네요 😵💫
레벨 4 잘 마무리해봅시다~!
